home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
basic
/
boxdraw.bas
< prev
next >
Wrap
BASIC Source File
|
1992-10-24
|
8KB
|
226 lines
'********************************BOXDRAW.BAS******************************
'
' a program I HAD to make for my own use as I couldn't find one that I could
' understand. A program to draw boxes on the screen in text mode using a
' SUB that you call with the box size, box line draw and box colors.
' Run it as a demo first and then add a box to one of your own programs.
' I have purposely put the variables on a line BEFORE the BOXDRAW1 SUB
' is called so that it is harder to mess up the CALL.
'
' If you like this program, let me know. If you make it better, give me
' a copy. If you don't like it, tell me why.
'
' John De Palma on CompuServe 76076,571
' October 23, 1992
'**************************************************************************
DEFINT A-Z
DECLARE SUB boxdraw1 (top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
' giving the color numbers names makes it easier to display and correct.
CONST black = 0
CONST blue = 1
CONST green = 2
CONST cyan = 3
CONST red = 4
CONST magenta = 5
CONST brown = 6
CONST grey = 7 'don't use above 7 for background
CONST bright = 8
CONST white = 15 'added this
CONST blink = 16
CONST yellow = 14 'or use brown + bright
DO 'outside loop
CLS
top = 1: bottom = 25: left = 1: right = 80: lines = 1: forecolor = white: backcolor = blue
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
LOCATE 1, 6: PRINT "Press a key to cycle the demo; PRESS <Esc> at the last screen to EXIT"
DO UNTIL LEN(INKEY$) 'press a key to go on
LOOP
PLAY "p32" 'a little multimedia
top = 2: bottom = 10: left = 2: right = 30: lines = 0: forecolor = yellow: backcolor = brown
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
DO UNTIL LEN(INKEY$)
LOOP
PLAY "p32"
top = 9: bottom = 18: left = 15: right = 35: lines = 1: forecolor = blue: backcolor = grey
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
DO UNTIL LEN(INKEY$)
LOOP
PLAY "p32"
top = 10: bottom = 15: left = 40: right = 50: lines = 2: forecolor = red: backcolor = black
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
DO UNTIL LEN(INKEY$)
LOOP
PLAY "p32"
top = 2: bottom = 12: left = 50: right = 79: lines = 3: forecolor = white: backcolor = green
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
DO UNTIL LEN(INKEY$)
LOOP
PLAY "p32"
top = 12: bottom = 24: left = 2: right = 22: lines = 4: forecolor = yellow: backcolor = red
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
DO UNTIL LEN(INKEY$)
LOOP
PLAY "p32"
top = 6: bottom = 10: left = 30: right = 50: lines = 5: forecolor = bright + cyan: backcolor = cyan
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
DO UNTIL LEN(INKEY$)
LOOP
PLAY "p32"
'it looks hard but it's really easy to draw a "shadowed box."
'all you have to do is first draw a box down and to the right (or left)
'of your display box using a black background and grey foreground.
'then call the display box.
'first the shadow....
top = 18: bottom = 24: left = 12: right = 74: lines = 0: forecolor = grey: backcolor = black
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
'then the display box...
top = 17: bottom = 23: left = 10: right = 70: lines = 2: forecolor = white: backcolor = cyan
CALL boxdraw1(top%, bottom%, left%, right%, lines%, forecolor%, backcolor%)
LOCATE 18, 15: PRINT "This is the last screen. Note this is a shadow box."
LOCATE 19, 15: PRINT "I hope you find this program as much fun to use"
LOCATE 20, 15: PRINT "as I had in developing it. This program makes free"
LOCATE 21, 15: PRINT "use of public code and stuff from other programs."
LOCATE 23, 22: PRINT "John De Palma on CompuServe 76076,571"
'If you really, really want to impress your friends then you may want
'to have a "see through" shadow. You will have to redraw the
'portion of the box covered by the shadow and that is harder
'if you are layering boxes as you go. The following code snippet will
'give you an idea on how to manually do this.
LOCATE 24, 12: COLOR grey, black: PRINT STRING$(11, 223);
DO UNTIL LEN(INKEY$) 'must be some key strokes
IF INKEY$ = CHR$(27) THEN SYSTEM 'left in the buffer as
LOOP 'you need a double escape
PLAY "p32" 'occasionally to get out
'of this program
WHILE INKEY$ = ""
IF INKEY$ = CHR$(27) THEN SYSTEM
WEND
PLAY "p32"
LOOP
SYSTEM
DEFSNG A-Z
SUB boxdraw1 (toprow%, bottomrow%, leftcolumn%, rightcolumn%, outline%, fgd%, bkgd%)
' This routine draws and colors text boxes using color and line draw.
' If outline% is set to 5, prints thick horizontal bars, top & bottom rows.
' If outline% is set to 4, prints a bold-lined box
' If outline% is set to 3, prints a double sided box
' If outline% is set to 2, prints double top and single sided box.
' If outline% is set to 1, prints a single sided box.
' If outline% is set to 0, prints a box with no outline.
'this sets the colors
COLOR fgd%, bkgd%
middle% = rightcolumn% - leftcolumn%
lines% = toprow%
boxside$ = CHR$(186) 'double line
boxside3$ = CHR$(179) 'single line
boxside4$ = CHR$(219) 'bold line
boxtop% = (rightcolumn% - leftcolumn%) - 1
boxtop$ = CHR$(201) + STRING$(boxtop%, 205) + CHR$(187) 'double line
boxtop2$ = CHR$(213) + STRING$(boxtop%, 205) + CHR$(184) 'double top, single side
boxtop3$ = CHR$(218) + STRING$(boxtop%, 196) + CHR$(191) 'single line
boxtop4$ = CHR$(220) + STRING$(boxtop%, 220) + CHR$(220) 'bold line
boxbottom$ = CHR$(200) + STRING$(boxtop%, 205) + CHR$(188) 'double line
boxbottom2$ = CHR$(212) + STRING$(boxtop%, 205) + CHR$(190) 'double bottom, single side
boxbottom3$ = CHR$(192) + STRING$(boxtop%, 196) + CHR$(217) 'single line
boxbottom4$ = CHR$(223) + STRING$(boxtop%, 223) + CHR$(223) 'bold line
midbox$ = STRING$(boxtop% + 1, 219)
'this prints the box
FOR boxsize% = toprow% TO bottomrow%
LOCATE lines%, leftcolumn%, 0
PRINT SPACE$(middle%);
lines% = lines% + 1
NEXT
'this prints the box outline
SELECT CASE outline%
CASE 0
EXIT SUB
CASE 1
LOCATE toprow%, leftcolumn%
PRINT boxtop3$;
FOR outline% = toprow% + 1 TO bottomrow% - 1
LOCATE outline%, leftcolumn%
PRINT boxside3$;
LOCATE outline%, rightcolumn%
PRINT boxside3$;
NEXT outline%
LOCATE bottomrow%, leftcolumn%
PRINT boxbottom3$;
CASE 2
LOCATE toprow%, leftcolumn%
PRINT boxtop2$;
FOR outline% = toprow% + 1 TO bottomrow% - 1
LOCATE outline%, leftcolumn%
PRINT boxside3$;
LOCATE outline%, rightcolumn%
PRINT boxside3$;
NEXT outline%
LOCATE bottomrow%, leftcolumn%
PRINT boxbottom2$;
CASE 3
LOCATE toprow%, leftcolumn%
PRINT boxtop$;
FOR outline% = toprow% + 1 TO bottomrow% - 1
LOCATE outline%, leftcolumn%
PRINT boxside$;
LOCATE outline%, rightcolumn%
PRINT boxside$;
NEXT outline%
LOCATE bottomrow%, leftcolumn%
PRINT boxbottom$;
CASE 4
LOCATE toprow%, leftcolumn%
PRINT boxtop4$;
FOR outline% = toprow% + 1 TO bottomrow% - 1
LOCATE outline%, leftcolumn%
PRINT boxside4$;
LOCATE outline%, rightcolumn%
PRINT boxside4$;
NEXT outline%
LOCATE bottomrow%, leftcolumn%
PRINT boxbottom4$;
CASE 5
LOCATE toprow%, leftcolumn%: PRINT midbox$;
LOCATE botto